/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package xmlaufgabe8;

import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.util.Enumeration;
import java.util.zip.ZipEntry;
import java.util.zip.ZipFile;
import org.xml.sax.InputSource;

/**
 * Klasse zum Entpacken, Parsen und Konvertieren der uebergebenen .odt Datei.
 * 
 * @author s0527676
 */
public class ODTReader {
    /**
     * Speichert die ZipFile
     */
    private ZipFile file;
    
    /**
     * Speichert die Eintraege des ZipFiles
     */
    private Enumeration entries;
    
    /**
     * Speichert einen speziellen Eintrag des ZipFiles
     */
    private ZipEntry entry;
    
    /**
     * Speichert den konvertierten Inhalt der .odt Datei
     */
    private String buffer;
    
    /**
     * Initialisiert Felder.
     * 
     * @param path Pfad der odt Datei
     * @throws IOException 
     */
    public ODTReader(String path) throws IOException {
        file = new ZipFile(path);
        entries = file.entries();
        buffer = "";
    }
    
    /**
     * Parst und Konvertiert die odt Datei.
     * 
     * @throws IOException 
     */
    public void parseODTFile() throws IOException {
        while(entries.hasMoreElements()) {
            entry = (ZipEntry) entries.nextElement();
            
            if(entry.getName().equals("content.xml")) {
                InputSource input = new InputSource(file.getInputStream(entry));
                
                ODTContentParser contentParser = new ODTContentParser();
                SAXParser saxParser = new SAXParser(input, contentParser);
                saxParser.parseXMLDocument(false, true);
                buffer = contentParser.getBuffer();
            }
        }
    }
    
    /**
     * Speichert die konvertierte odt Datei im XML Format ab.
     * @throws IOException 
     */
    public void saveXMLFile() throws IOException {
        File fileName = new File("po.xml");
        FileWriter writer = new FileWriter(fileName, false);
        writer.write(buffer);
        writer.flush();
        writer.close();
    }
    
    /**
     * Gibt den konvertierten Inhalt der odt Datei zurueck.
     * 
     * @return Inhalt der konvertierten odt Datei
     */
    public String getBuffer() {
        return buffer;
    }
}
